package fr.afcepf.atod21.dao;

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.Types;
import java.util.List;

import fr.afcepf.atod21.data.Atod21DataSource;
import fr.afcepf.atod21.entite.Stagiaire;
import fr.afcepf.atod21.exception.Atod21Exception;

/**
 * cxxcv.
 * @author Stagiaire
 *
 */
public class DaoStagiaireImpl implements IDaoStagiaire {

    private Atod21DataSource ds = new Atod21DataSource();
    
    @Override
    public List<Stagiaire> rechercherParNom(String paramNom) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public List<Stagiaire> rechercherParIdOrganisme(int paramIdOrganisme) {
        // TODO Auto-generated method stub
        return null;
    }

    private final String reqAjouter = "INSERT into stagiaire(nom, prenom, adresse,date_naissance,id_organisme) VALUES (?,?,?,?,?)";
    @Override
    public Stagiaire ajouter(Stagiaire paramStag) throws Atod21Exception {

       Stagiaire stagiaireRecup = null;
       try {
        PreparedStatement pstmt =  ds.getConnection().prepareStatement(reqAjouter, Statement.RETURN_GENERATED_KEYS);
        pstmt.setString(1, paramStag.getNom());
        pstmt.setString(2, paramStag.getPrenom());
        pstmt.setString(3, paramStag.getAdresse());
        pstmt.setDate(4, new Date(paramStag.getDateNaissance().getTime()));
        if (paramStag.getOrganisme() != null) {
            pstmt.setInt(5, paramStag.getOrganisme().getId());
        } else {
            pstmt.setNull(5, Types.INTEGER);
        }
        
        int resultSql = pstmt.executeUpdate();
        if(resultSql == 1){
            ResultSet rs = pstmt.getGeneratedKeys();
            if (rs.next()) {
                stagiaireRecup.setId(rs.getInt(0));
            }
        }
    } catch (SQLException e) {
        throw new Atod21Exception("Erreur 10001 - DaoStagiaire --> ajouter");
    }
        return stagiaireRecup;
    }

    private final String reqRenvoi = "UPDATE stagiaire SET id_organisme = null WHERE idstagiaire = ? AND id_organisme = ?";
    private final int indiceIdStagRenvoi = 1;
    private final int indiceIdOrgaRenvoi = 2;
    
    @Override
    public Stagiaire renvoi(Stagiaire paramStag) throws Atod21Exception {
        
        try {
            Connection cnx = ds.getConnection();
            PreparedStatement pstmt = cnx.prepareStatement(reqRenvoi);
            pstmt.setInt(indiceIdStagRenvoi, paramStag.getId());
            pstmt.setInt(indiceIdOrgaRenvoi, paramStag.getOrganisme().getId());
            
            if (pstmt.executeUpdate() == 1) {
                paramStag.setOrganisme(null);
            }else {
                throw new Atod21Exception("Erreur 10003 - DaoStagiaire --> renvoi / Le stagiaire n'est pas dans cet organisme");
            }
            
        } catch (Exception e) {
            throw new Atod21Exception("Erreur 10002 - DaoStagiaire --> renvoi");
        }
       
        return paramStag;
    }

}
